<?php
class totalprice extends CI_Controller
{
	function __construct()
	{
		parent::__construct();
		$this->load->library('form_validation');
		$this->load->helper(array('url','html','date','array','cookie'));
		
	}
	
	function index()
	{
		//Kontrollera om det kommer från search, discount eller boka.	
		//kontrollerar om den kommer från Search controllern
		if($this->input->post('startDate')&&$this->input->post('endDate')&&$this->input->post('carId'))
		{
			//kontrollerar om cookien stbilBokingInfo är satt den raderas då.
			if($this->input->cookie('stbilBokingInfo'))
			{
				delete_cookie('stbilBokingInfo');
			}
			
			$startDate=$this->input->post('startDate');
			$endDate=$this->input->post('endDate');
			$carId=$this->input->post('carId');
			
			//RÄknar ut priset för bokningen.			
			$thePriceData = $this->_CountPrice(0, $startDate, $endDate, $carId);
			//Hidden data that about start date, end date and the car id thats beeing saved in the view so it can be accesed again
			//Hämtar bilinformation.
			$this->load->model('Car_model');
			$carInfo=$this->Car_model->GetCarInfo($carId);
			
			$thePriceData['startDate'] = $startDate;
			$thePriceData['endDate'] =$endDate;
			$thePriceData['carID'] = $carId;
			$thePriceData['carInfo']=$carInfo;
			$thePriceData['discountCode'] = 0;
			
			$data['title']='Totala priser';
			$data['message'] ="";
			$this->load->view('global/view_master_header',$data);
			$this->load->view('booking/view_price_result', $thePriceData, $data);
			$this->load->view('global/view_master_footer');
			
			
		}
		//Kontrollerar att posten kommer från discount.
		elseif ($this->input->post('btnDiscount'))
		{
			//kontrollerar om cookien stbilBokingInfo är satt den raderas då.
			if($this->input->cookie('stbilBokingInfo'))
			{
				delete_cookie('stbilBokingInfo');
			}
						
	
			$disc = $this->input->post('discount',TRUE);
			$startDate = $this->input->post('txtStartDate');
			$endDate = $this->input->post('txtEndDate');
			$carId = $this->input->post('txtCarId');
			
			if ($disc != NULL)
			{
				
				$this->load->model('Price_model');
				
				$result = $this->Price_model->CheckDiscount($disc);
				
				$thePriceData = $this->_CountPrice($result, $startDate, $endDate, $carId);
				
				//hämtar information om bilen.
				$this->load->model('Car_model');
				$carInfo=$this->Car_model->GetCarInfo($carId);
				//Hidden data that about start date, end date and the car id thats being saved in the view so it can be accesed again
				$thePriceData['startDate'] = $startDate;
				$thePriceData['endDate'] =$endDate;
				$thePriceData['carID'] = $carId;
				$thePriceData['carInfo']=$carInfo;
				$thePriceData['discountCode'] = $disc;
				
				
				$data['title']='Totala priser';
				$data['message'] ="";
				$this->load->view('global/view_master_header',$data);
				$this->load->view('booking/view_price_result', $thePriceData, $data);
				$this->load->view('global/view_master_footer');	
			}	
			
		}
		
		//kod som körs om bekräftelse knappen trycks
		elseif($this->input->post('btnConfirm'))
		{
			//kontrollerar om cookien stbilBokingInfo är satt den raderas då.
			if($this->input->cookie('stbilBokingInfo'))
			{
				delete_cookie('stbilBokingInfo');
			}
			
			$totalPrice = $this->input->post('txtTotalPrice');
			$startDate = $this->input->post('txtStartDate');
			$endDate = $this->input->post('txtEndDate');
			$carId = $this->input->post('txtCarId');
			$discountCode = $this->input->post('txtDiscountCode');
			
			$this->load->model('reservation_model');
			
			$userID = $this->session->userdata('UserId');
			
			if($userID != NULL)
			
			{		
				$reserv = $this->reservation_model->CreateReservation($userID, $carId, $startDate, $endDate, $totalPrice, $discountCode);
				 
				 if ($reserv != FALSE)
				 {
				 	echo("Lyckad reg");
				 }
				 
				 else
				 {
				 	echo("nått gick fel med registreringen");
				 }
			}
			
			else
			{
				
				//spara ner boknings informationen i en cookie så att man har informationen kvar.
				$infoToSend=array('startDatum'=>$startDate,'slutDatum'=>$endDate,'bil'=>$carId,'rabatt'=>$discountCode);
				$infoToSend=json_encode($infoToSend);
				
				$cookie=array('name'   => 'BokingInfo',
    							'value'  => $infoToSend,
							    'expire' => '300',
							    'domain' => '',//sätter cookiens scope.
							    'path'   => '/',
							    'prefix' => 'stbil',
							    'secure' => FALSE);
				$this->input->set_cookie($cookie);
				
				redirect('user/Login');
				
				echo "Logga in innan du kan boka!";								
			}	
		}
		elseif($this->input->cookie('stbilBokingInfo'))
		{
			//dekodar cookien
			$bokningsInfo=$this->input->cookie('stbilBokingInfo');
			$bokningsInfo=json_decode($bokningsInfo);
			
			
			$disc = $bokningsInfo->rabatt;
			$startDate = $bokningsInfo->startDatum;
			$endDate = $bokningsInfo->slutDatum;
			$carId = $bokningsInfo->bil;
			
			if ($disc != NULL)
			{
				
				$this->load->model('Price_model');
				$result = $this->Price_model->CheckDiscount($disc);
				$thePriceData = $this->_CountPrice($result, $startDate, $endDate, $carId);
			}
			else
			{
				$thePriceData = $this->_CountPrice(0, $startDate, $endDate, $carId);
			}	
				//hämtar information om bilen.
				$this->load->model('Car_model');
				$carInfo=$this->Car_model->GetCarInfo($carId);
				//Hidden data that about start date, end date and the car id thats being saved in the view so it can be accesed again
				$thePriceData['startDate'] = $startDate;
				$thePriceData['endDate'] =$endDate;
				$thePriceData['carID'] = $carId;
				$thePriceData['carInfo']=$carInfo;
				$thePriceData['discountCode'] = $disc;
				
				
				$data['title']='Totala priser';
				$data['message'] ="";
				$this->load->view('global/view_master_header',$data);
				$this->load->view('booking/view_price_result', $thePriceData, $data);
				$this->load->view('global/view_master_footer');	
				
		}
				
		 
	}
	
	
	function _CountPrice($disc, $startDate, $endDate, $carId)
	{
		//rabbaten
		$discount = $disc;
		
		//Ändrar datumena till unix.
		//tar bort 15 minuter från starttiden för att underlätta beräkningen. 15 min = 900sek
		$unixStartDate = human_to_unix($startDate);
		$unixStartDate=$unixStartDate-900;
		$unixEndDate = human_to_unix($endDate);
			
		//$time = antalet sekunder mellan startdatumet och slutdatumet.	
		$time = $unixEndDate - $unixStartDate;
		
		//hämtar priskategorin om användaren är inloggad.
		$priceClass = $this->session->userdata('PriceCategory');
		
		//kollar om användaren är nloggad annars får användaren standard klassen 1
		if($priceClass != NULL)
		{
			$priceClass = $this->session->userdata('PriceCategory');
		}
		else
		{
			$priceClass = 1;
		}		
		
		//Hämtar priserna för bilen med anbnvädar klassen och bilidet
		$this->load->model('Price_model');
		$priceArray = $this->Price_model->GetPrices($priceClass,$carId);
		
		//Kontrollerar att det finns pris för vald bil med vald prisklass.
		//Annars echoas DB fel ut.
		if($priceArray != FALSE)
		{
			//kontrollerar tiden överstiger en vecka 604800/60/60/24=7
			//Annars sätts $weeksprice till 0
			if ($time / 604800 >= 1)
			{
				//Tar ut antalet veckor
				$weeks = floor($time/604800);
				//Tar fram det totala priset för veckor
				$weeksprice = element('WeekPrice', $priceArray) * $weeks;
				//Lägger till värden i $totalweeks för att skicka med till viewn.
				$totalweeks=array('veckor'=>$weeks,
								'veckoPris'=>element('WeekPrice', $priceArray),
								'veckoTotal'=>$weeksprice);
				//Tar bort vecko tiden från den totala tiden.
				$time = $time - (604800 * floor($time/604800));
			}	
			else
			{			
				$weeksprice = 0;
			}
	
			//kontrollerar att tiden överstiger en dag 86400/60/60=24
			//annars sätts $daysprice till 0.
			if ($time / 86400 >= 1)
			{
				//tar ut antralet dagar.
				$days = floor($time/86400);
				//tar fram det totala priset för dagar.
				$daysprice = element('DayPrice', $priceArray) * $days;
				//läggertill värden i $totaldays för att skicka med till viewn
				$totaldays=array('dagar'=>$days,
								'dagPris'=>element('DayPrice', $priceArray),
								'dagTotal'=>$daysprice);
				//tar bort dag tiden från den totala tiden.				
				$time = $time - (86400 * floor($time/86400));
			}
			else
			{
				$daysprice = 0;
			}
	
			//kontrollerar att tiden överskrider 45 minuter 45 2700/60=45 
			if($time/2700 >= 1)
			{
				//tar ut antalet timmar
				$hours = round($time / 3600);
				//tar ut det totala priset för timmar.
				$hoursprice = element('HourPrice', $priceArray) * $hours;
				//lägger till värden i $totalhours för att skicka med till viewn.
				$totalhours=array('timmar'=>$hours,
								'timPris'=>element('HourPrice', $priceArray),
								'timTotal'=>$hoursprice);
				//räknar bort tim tiden från den totala tiden.				
				$time = $time - (3600 * floor($time/3600));
			}
			else
			{
				$hoursprice=0;
			}
			
			//räknar samman vecko, dag och tim kostnad.
			$totalPriceOfOrder=$weeksprice+$daysprice+$hoursprice;
						
			//kontrollerar så att $discount inte är 0
			//är den 0 räknas vackopris,dagpris och tim pris ihop till $totalPriceOfOrder.
			if ($discount != 0)
			{
				//kontrollerar om rabbaten är under 0, då är det en % rabbat.
				if($discount < 1)
				{	
					//$this->total = 11;
					$totaldiscount = $totalPriceOfOrder * $discount;
					$totalPriceOfOrder = $totalPriceOfOrder -$totaldiscount;
				}
				
				//kontrollerar om rabbaten är mer eller lika med 1 isåfall är det fast rabbat.
				elseif($discount >= 1)
				{		
					$totaldiscount = $discount;
					$totalPriceOfOrder = $totalPriceOfOrder-$discount;		
				}
				
				else
				{
					echo "rabatt fel";
				}
				
			}
			
			else
			{		
				//Total price of no discount is aktive
				$totaldiscount = FALSE;
		
			}
		}
		
		else
		{
			echo "DB fel!";
			
		}
		
		//Fyller i en array med data till resultat sidan, men först en koll så de har tilldelats ett värde			
		if (isset($totalweeks))
		{
			$pricedata['weeks'] = $totalweeks;
		}
		
		if (isset($totaldays))
		{
			$pricedata['days'] = $totaldays;
		}
		
		if (isset($totalhours))
		{
			$pricedata['hours'] = $totalhours;
		}
		
		$pricedata['discount'] = $totaldiscount;
		$pricedata['totalPriceOfOrder'] = $totalPriceOfOrder;
		
		return $pricedata;
	
	}	
}
?>